二次贝塞尔曲线转换为三次贝塞尔曲线

二次贝塞尔曲线转换为三次贝塞尔曲线

在使用cairo绘图的时候,发现cairo不支持二次贝塞尔曲线的绘制,为了与QT实现的canvas的行为一致,cairo必须同样实现二次贝塞尔曲线的绘制。思路是将二次转换成三次,然后用3次的方式绘制。

二次贝塞尔曲线公式

Q(t) = Q0 (1-t)² + 2 Q1 (1-t) t + Q2 t²

三次贝塞尔曲线公式

Q(t) = Q0 (1-t)² + 2 Q1 (1-t) t + Q2 t²

公式推导过程

将二次贝塞尔曲线转换成三次贝塞尔曲线,必须要让这两个多项式相等,它们的多项式系数必须相等。
通过展开表达式:(1-t)²= 1- 2t + t²),然后把所有的项分解成1、t、t²和t³,得到多项式系数:
Q(t) = Q0 + (-2Q0 + 2Q1) t + (Q0 - 2Q1 + Q2) t²
C(t) = C0 + (-3C0 + 3C1) t + (3C0 - 6C1 + 3C2) t² + (-C0 + 3C1 -3C2 + C3) t³

因此,可以得到以下4个方程:

C0 = Q0
-3C0 + 3C1 = -2Q0 + 2Q1
3C0 - 6C1 + 3C2 = Q0 - 2Q1 + Q2
-C0 + 3C1 -3C2 + C3 = 0

将第二行中的C0代入Q0就可以解出C1,得到:
C1 = Q0 + (2/3) (Q1 - Q0)

然后,可以继续代入求出C2然后求出C3,或者简单地说,通过对称性,得出结论:
C0 = Q0
C1 = Q0 + (2/3) (Q1 - Q0)
C2 = Q2 + (2/3) (Q1 - Q2)
C3 = Q2

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值